#ifndef __management_method__
#define __management_method__
#include <gtk/gtk.h>
#include "struct.h"

/**************************
**		图形界面函数       **
**************************/
//  创建主界面
void create_main(void);

//  创建  menubar(左上角下拉菜单)
void create_menubar(GtkWidget *win, GtkWidget *menubar);

//  创建选择文件的界面
char *choose_file(int file_operation);

//  录入新的教学楼信息
void new_building(void);

//  录入新的教室信息
void new_classroom(void);

//  录入新的课程信息
void new_arrangement(void);

//  创建教学楼信息编辑界面
void edit_building(int data_condition);

//  创建教室信息编辑界面
void edit_classroom(int data_condition);

//  创建编辑排课信息界面
void edit_arrangement(int data_condition);

//  创建搜寻相关教学楼界面
void search_building(void);

//  搜寻相关教室
void search_classroom(void);

//  搜寻相关课程
void search_arrangement(void);

//  创建统计功能一界面
void count_1(void);

//  创建统计功能二界面
void count_2(void);

//  创建统计功能三界面
void count_3(void);

//  创建统计功能四界面
void count_4(void);

//  创建统计功能五界面
void count_5(void);

//  创建显示教学楼数据详情界面
void show_building_detail(void);

//  创建显示教室数据详情界面
void show_classroom_detail(int flag);

//  创建显示排课数据详情界面
void show_arrangement_detail(int flag);

// 右键菜单显示教室信息
void menu_show_classroom(GtkWidget *ignored);

// 右键菜单显示排课信息
void menu_show_arrangement (GtkWidget *ignored);

//  右键菜单修改教学楼信息
void menu_change_building_main(GtkWidget *ignored);

//  右键菜单修改教室信息
void menu_change_classroom(GtkWidget *ignored);

//  右键菜单修改排课信息
void menu_change_arrangement(GtkWidget *ignored);

//  右键菜单删除教学楼信息
void menu_delete_building_main(GtkWidget *ignored);

//  右键菜单删除教室信息
void menu_delete_classroom(GtkWidget *ignored);

//  右键菜单删除排课信息
void menu_delete_arrangement(GtkWidget *ignored);

//  教学楼信息界面右键菜单显示教室详情预处理
int handle_Pop_up_menu_building(struct Pop_up_menu_building *pop_menu, GdkEvent *event);

//  教室信息界面右键菜单显示排课详情预处理
int handle_Pop_up_menu_classroom(struct Pop_up_menu_classroom *pop_menu, GdkEvent *event);

//  显示程序名、版本、网址、作者等基本信息
void help_about(void);

//  显示帮助信息
void help(void);

//  弹出错误信息提示窗口
void errmesg(const char *error);

//  撤销窗口
void destroy_window(GtkWidget *ignored, GtkWidget *window);

//   将新的教学楼信息添加到treeview 并存储于链表中
void handle_new_building(GtkWidget *ignored, struct Building_Entry * data);

//  将“xx-xx" 字符串分割
void split_time_string(char *time, int min_max[2]);

//  判断课程时间是否符合
int in_range(char *time1, char *time2);




/**************************
**		数据操作函数       **
**************************/
//  向 gtktree 中插入教学楼数据
void list_building_insert(GtkListStore *list, Building *building);

//  向 gtktree 中插入教室数据
void list_classroom_insert(GtkListStore *list, char *building_number, Classroom *classroom);

//  向 gtktree 中插入排课数据
void list_arrangement_insert(GtkListStore *list, char *building_number, char *classroom_number, Arrangement *arrangement);

//  搜索教学楼信息预处理
void handle_search_building_data(GtkWidget *ignored, struct Building_Entry * data);

//  搜索教室信息预处理
void handle_search_classroom_data(GtkWidget *ignored, struct Classroom_Entry *data);

//  搜索排课信息预处理
void handle_search_arrangement_data(GtkWidget *ignored, struct Arrangement_Entry *data);

//  统计二功能实现
void count_2_handle_data(GtkWidget *ignored, GtkEntry *entry_term);

//  统计三功能实现
void count_3_handle_data(GtkWidget *ignored, struct Count_3_ENTRY *data);

//  统计四功能实现
void count_4_handle_data(GtkWidget *ignored, struct Count_4_ENTRY *data);

//  统计五功能实现
void count_5_handle_data(GtkWidget *ignored, struct Count_5_ENTRY *data);

//  新建教学楼信息预处理
void handle_new_building(GtkWidget *ignored, struct Building_Entry * data);

//  新建教室信息预处理
void handle_new_classroom(GtkWidget *ignored, struct Classroom_Entry * data);

//  新建排课信息预处理
void handle_new_arrangement(GtkWidget *ignored, struct Arrangement_Entry * data);

//  修改教学楼信息预处理
void handle_change_building(GtkWidget *ignored, struct Building_Entry *data);

//  修改教室信息预处理
void handle_change_classroon(GtkWidget *ignored, struct Classroom_Entry *data);

//  修改排课信息预处理
void handle_change_arrangement(GtkWidget *ignored, struct Arrangement_Entry *data);

//  通过编号搜索教学楼
Building * search_building_by_number(gchar * number);

//  通过编号搜索教室
Classroom * search_classroom_by_number(Building *building, char *number);

//  精确搜索教学楼
void search_building_detail(char *number, char *name);

//  精确搜索教室
void search_classroom_detail(Classroom *classroom, char *building_number);

//  精确搜索课程
void search_arrangement_detail(Arrangement * arrangement, char *number_building, char *number_classroom);




/**************************
**		文件操作函数       **
**************************/
//  新建文件
void file_new(void);

//  打开文件
void file_open(void);

//  保存文件
void file_save(void);

//  另存文件
void file_save_as(void);

//  关闭文件
void file_close(void);

//  写入文件
void save_data(void);




/**************************
**		测试输出函数       **
**************************/
//  读取数据时输出数据
void test_print_data(void);
#endif
